package xyz.ssf.cloud.project.system.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import xyz.ssf.cloud.common.core.domain.R;
import xyz.ssf.cloud.common.utils.JwtUtil;
import xyz.ssf.cloud.project.system.domain.vo.PasswordUpdateVO;
import xyz.ssf.cloud.project.system.domain.vo.ProfileUpdateVO;
import xyz.ssf.cloud.project.system.domain.vo.ProfileVO;
import xyz.ssf.cloud.project.system.service.ISysProfileService;
import xyz.ssf.cloud.project.system.service.FileService;

import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * 个人中心 控制器
 * 
 * @author ssf
 */
@RestController
@RequestMapping("/system/user/profile")
public class SysProfileController {
    
    @Autowired
    private ISysProfileService profileService;
    
    @Autowired
    private JwtUtil jwtUtil;

    @Autowired
    private FileService fileService;
    
    /**
     * 获取个人信息
     */
    @GetMapping
    public R<ProfileVO> getProfile(@RequestHeader("token") String token) {
        // 从token中获取用户ID
        Long userId = jwtUtil.getUserIdFromToken(token);
        if (userId == null) {
            return R.unauthorized();
        }
        
        // 获取个人信息
        ProfileVO profile = profileService.getProfile(userId);
        if (profile == null) {
            return R.error("获取个人信息失败");
        }
        
        return R.success(profile);
    }
    
    /**
     * 更新个人信息
     */
    @PutMapping
    public R<Void> updateProfile(@RequestHeader("token") String token, @RequestBody ProfileUpdateVO profileUpdate) {
        // 从token中获取用户ID
        Long userId = jwtUtil.getUserIdFromToken(token);
        if (userId == null) {
            return R.unauthorized();
        }
        
        // 更新个人信息
        int result = profileService.updateProfile(userId, profileUpdate);
        if (result <= 0) {
            return R.error("更新个人信息失败");
        }
        
        return R.success("修改成功");
    }
    
    /**
     * 修改密码
     */
    @PutMapping("/updatePwd")
    public R<Void> updatePassword(@RequestHeader("token") String token, @RequestBody PasswordUpdateVO passwordUpdate) {
        // 从token中获取用户ID
        Long userId = jwtUtil.getUserIdFromToken(token);
        if (userId == null) {
            return R.unauthorized();
        }
        
        // 更新密码
        int result = profileService.updatePassword(userId, passwordUpdate);
        if (result == -1) {
            return R.error("旧密码错误");
        } else if (result == -2) {
            return R.error("新密码与确认密码不一致");
        } else if (result == -3) {
            return R.error("密码不符合复杂度要求，至少8位，包含大小写字母和数字");
        } else if (result <= 0) {
            return R.error("修改密码失败");
        }
        
        return R.success("修改成功");
    }
    
    /**
     * 上传头像
     */
    @PostMapping("/avatar")
    public R<Map<String, String>> uploadAvatar(@RequestHeader("token") String token, @RequestParam("file") MultipartFile file) {
        // 从token中获取用户ID
        Long userId = jwtUtil.getUserIdFromToken(token);
        if (userId == null) {
            return R.unauthorized();
        }
        
        if (file.isEmpty()) {
            return R.error("上传文件不能为空");
        }
        
        try {
            // 使用FileService上传文件
            String fileUrl = fileService.uploadFile(file, "avatar");
            
            // 更新用户头像
            int result = profileService.updateAvatar(userId, fileUrl);
            if (result <= 0) {
                return R.error("更新头像失败");
            }
            
            // 返回头像访问路径
            Map<String, String> data = new HashMap<>();
            data.put("url", fileUrl);
            
            return R.success("上传成功", data);
        } catch (Exception e) {
            return R.error("上传失败：" + e.getMessage());
        }
    }
} 